package com.xh.chat.service;

import com.xh.chat.model.table.ChatMsg;
import com.xh.chat.model.table.User;
import com.xh.chat.model.vo.FriendRequestVO;
import com.xh.chat.model.vo.MyFriendsVO;
import com.xh.chat.netty.dto.ChatMsgDTO;

import java.util.List;

public interface UserService {

    /**
     * 判断用户名是否存在
     */
    boolean queryUsernameIsExist(String username);

    /**
     * 查询用户是否存在
     */
    User queryUserForLogin(String username, String pwd);

    /**
     * 用户注册
     */
    User saveUser(User user);

    /**
     * 修改用户记录
     */
    User updateUserInfo(User user);

    /**
     * 搜索朋友的前置条件
     */
    Integer preconditionSearchFriends(Long myUserId, String friendUsername);

    /**
     * 根据用户名查询用户对象
     */
    User queryUserInfoByUsername(String username);

    /**
     * 添加好友请求记录，保存到数据库
     */
    void sendFriendRequest(Long myUserId, String friendUsername);

    /**
     * 查询好友请求
     */
    List<FriendRequestVO> queryFriendRequestList(Long acceptUserId);

    /**
     * 删除好友请求记录
     */
    void deleteFriendRequest(Long sendUserId, Long acceptUserId);

    /**
     * 通过好友请求
     * 1. 保存好友
     * 2. 逆向保存好友
     * 3. 删除好友请求记录
     */
    void passFriendRequest(Long sendUserId, Long acceptUserId);

    /**
     * 查询好友列表
     */
    List<MyFriendsVO> queryMyFriends(Long userId);

    /**
     * 保存聊天消息到数据库
     */
    Long saveMsg(ChatMsgDTO chatMsgDTO);

    /**
     * 批量签收消息
     */
    void updateMsgSigned(List<Long> msgIdList);

    /**
     * 获取未签收消息列表
     */
    List<ChatMsg> getUnReadMsgList(String acceptUserId);

}
